Welcome to my_other!

# 识别关键区域 regions = { 'product_info': self._find_by_keywords(ws, ['产品名称', '产品编码', '流程号']),

cost_table': self._find_table_by_headers(ws, ['序号', '产品名称', '材料描述', '用量']),

summary': self._find_by_keywords(ws, ['合计', '总成本', '基准价格']),

'process_params': self._find_by_keywords(ws, ['模穴数', '单重', '材料利用率']) } wb.close() return regions


这段代码是用于从Excel工作表中识别不同区域的关键部分。具体来说,它通过关键词或表头来定位Excel中的四个主要区域:产品基本信息、成本明细表、汇总区域和工艺参数区域。

详细解释如下:

1. regions 是一个字典,用于存储识别出的四个区域的位置和信息。

2. 'product_info'(产品基本信息):

通过关键词查找,使用 _find_by_keywords 方法,在工作表中搜索包含'产品名称'、'产品编码'、'流程号'的单元格,并记录这些关键词所在的位置和对应的值。

3. 'cost_table'(成本明细表):

通过表头识别,使用 _find_table_by_headers 方法,查找包含特定表头('序号', '产品名称', '材料描述', '用量')的表格。一旦找到这些表头,就认为该行是成本明细表的表头,并返回表头所在行、列映射以及数据开始行。

4. 'summary'(汇总区域):

通过关键词查找,使用 _find_by_keywords 方法,在工作表中搜索包含'合计'、'总成本'、'基准价格'的单元格,并记录这些关键词所在的位置和对应的值。

5. 'process_params'(工艺参数区域):

通过关键词查找,使用 _find_by_keywords 方法,在工作表中搜索包含'模穴数'、'单重'、'材料利用率'的单元格,并记录这些关键词所在的位置和对应的值。

6. wb.close() 关闭工作簿,释放资源。

7. 返回 regions 字典,其中包含了每个区域的位置和信息。

这样,通过识别这些关键区域,程序就可以知道在Excel的哪些位置可以找到所需的数据,进而进行数据提取。

注意:这些方法(如 _find_by_keywords 和 _find_table_by_headers)是自定义的,它们会遍历工作表的行和列来定位关键词和表头。

这段代码是智能区域识别系统的核心部分,让我详细解释每一行:


代码功能概述

python

# 识别关键区域

regions = {

'product_info': self._find_by_keywords(ws, ['产品名称', '产品编码', '流程号']),

'cost_table': self._find_table_by_headers(ws, ['序号', '产品名称', '材料描述', '用量']),

'summary': self._find_by_keywords(ws, ['合计', '总成本', '基准价格']),

'process_params': self._find_by_keywords(ws, ['模穴数', '单重', '材料利用率'])

}


详细分解

1. regions 字典结构

python

regions = {

'product_info': ...,

'cost_table': ...,

'summary': ...,

'process_params': ...

}

作用:创建一个字典来存储识别出的四个关键数据区域,每个区域对应Excel表格中的一个数据块。


2. 产品信息区域 (product_info)

python

'product_info': self._find_by_keywords(ws, ['产品名称', '产品编码', '流程号'])

关键词:产品名称产品编码流程号

搜索逻辑:

在工作表ws中扫描前50行×30列的区域

寻找包含上述关键词的单元格

当找到"产品名称"时,记录其位置和右侧/下方的实际产品名称值

当找到"产品编码"时,记录其位置和产品编码值

当找到"流程号"时,记录其位置和流程号值


返回数据结构:

python

{

'产品名称': {

'position': (行号, 列号), # 如 (3, 2)

'value': 'SMT 弹片 不锈钢 镍底2μm Min...' # 实际产品名称

},

'产品编码': {

'position': (行号, 列号), # 如 (3, 11)

'value': '19163055-01' # 实际产品编码

},

'流程号': {

'position': (行号, 列号), # 如 (2, 17)

'value': '202509280379' # 实际流程号

}

}


3. 成本明细表区域 (cost_table)

python

'cost_table': self._find_table_by_headers(ws, ['序号', '产品名称', '材料描述', '用量'])

表头关键词:序号产品名称材料描述用量

搜索逻辑:

寻找包含这些表头关键词的行

识别表格的起始位置(表头行)

映射各列的位置(哪一列是"序号",哪一列是"材料描述"等)

确定数据行的开始位置(通常是表头行的下一行)


返回数据结构:

python

{

'header_row': 5, # 表头所在行号

'columns': {

'序号': 1, # "序号"在第1列

'产品名称': 2, # "产品名称"在第2列

'材料描述': 6, # "材料描述"在第6列

'用量': 11 # "用量"在第11列

},

'data_start': 6 # 数据从第6行开始

}


4. 汇总区域 (summary)

python

'summary': self._find_by_keywords(ws, ['合计', '总成本', '基准价格'])

关键词:合计总成本基准价格

搜索逻辑:

寻找包含"合计"关键词的行(通常是汇总行)

在汇总行中查找"总成本"、"基准价格"等关键指标

记录这些指标的值和位置

实际应用:

当找到"合计"行时,程序知道这是数据汇总区域

在"合计"行中查找"总成本"列,获取总成本数值

在"合计"行中查找"基准价格"列,获取基准价格数值


5. 工艺参数区域 (process_params)

python

'process_params': self._find_by_keywords(ws, ['模穴数', '单重', '材料利用率'])

关键词:模穴数单重材料利用率

搜索逻辑:

寻找冲压、注塑等工艺的技术参数区域

识别工艺参数表格的位置

记录关键工艺参数的值

对应Excel中的区域:

text

产品代码 | 模穴数 | 单重(G) | 毛重(G) | 材料利用率 | ...

19167036 | 1 | 0.162 | 0.162 | =D14/E14 | ...


6. 工作簿关闭

python

wb.close()

作用:关闭Excel工作簿,释放系统资源,避免文件被占用。

实际工作流程示例

假设处理您的 bbb.xlsx 文件:

1. 扫描产品信息:

在第3行第2列找到"产品名称",右侧是实际产品名称

在第3行第11列找到"产品编码",右侧是"19163055-01"

在第2行第17列找到"流程号",右侧是"202509280379"

2. 识别成本表格:

在第5行识别到表头:["序号", "产品名称", "产品编码", ..., "用量"]

确定数据从第6行开始

3. 定位汇总行:

在第11行找到"合计",识别这是汇总区域

获取总成本、基准价格等关键数值

4. 找到工艺参数:

在第13行找到工艺参数表头

在第14行获取具体的工艺参数值

为什么这种设计很重要

灵活性

不依赖固定位置,可以处理不同格式的Excel文件

即使表格结构有微小变化,只要关键词存在就能识别


可扩展性

python

# 可以轻松添加新的识别区域

regions = {

'product_info': self._find_by_keywords(ws, ['产品名称', '产品编码', '流程号']),

'cost_table': self._find_table_by_headers(ws, ['序号', '产品名称', '材料描述', '用量']),

'summary': self._find_by_keywords(ws, ['合计', '总成本', '基准价格']),

'process_params': self._find_by_keywords(ws, ['模穴数', '单重', '材料利用率']),

'new_region': self._find_by_keywords(ws, ['新关键词1', '新关键词2']) # 新增区域

}

容错性

即使某些区域缺失,其他区域仍能正常识别

通过多个关键词提高识别准确性

这种设计让系统能够智能地"理解"Excel表格的结构,而不是硬编码位置,这正是处理数千个可能格式略有不同的产品表格所需要的。